import os
import sys
import logging
from pathlib import Path

# 获取项目根目录
ROOT_DIR = Path(__file__).parent.absolute()
TMP_DIR = ROOT_DIR / "tmp"

# 确保tmp目录存在
TMP_DIR.mkdir(exist_ok=True)

# 设置PYTHONPYCACHEPREFIX
os.environ['PYTHONPYCACHEPREFIX'] = str(TMP_DIR)

# 将项目根目录添加到Python路径
sys.path.insert(0, str(ROOT_DIR))

from src.backend.App import app
from src.backend.utils.envLoader import appConfig
from src.backend.services.viteService import runViteInThread
from fastapi.staticfiles import StaticFiles

logging.basicConfig(level=logging.INFO)

if __name__ == "__main__":
    import uvicorn
    
    # 开发模式
    if appConfig.VITE_HMR:
        logging.info("启动开发模式...")
        # 启动Vite开发服务器
        runViteInThread()
        # 启动FastAPI服务器（带重载）
        uvicorn.run(
            "src.backend.App:app",
            host=appConfig.HOST,
            port=appConfig.PORT,
            reload=appConfig.FASTAPI_RELOAD,
            reload_dirs=[str(ROOT_DIR / "src")] if appConfig.FASTAPI_RELOAD else None,
            timeout_keep_alive=30
        )
    # 生产模式
    else:
        logging.info("启动生产模式...")
        # 挂载静态文件目录
        staticDir = ROOT_DIR / "dist" / "frontend"
        if staticDir.exists():
            # 挂载根目录
            app.mount("/", StaticFiles(directory=str(staticDir), html=True), name="static")
            # 挂载assets目录
            app.mount("/assets", StaticFiles(directory=str(staticDir / "assets"), html=False), name="assets")
            logging.info(f"已挂载静态文件目录: {staticDir}")
        else:
            logging.error(f"静态文件目录不存在: {staticDir}")
        # 只启动FastAPI服务器（不带重载）
        uvicorn.run(
            "src.backend.App:app",
            host=appConfig.HOST,
            port=appConfig.PORT,
            reload=False,
            timeout_keep_alive=30,
            workers=1  # 使用单进程模式，避免静态文件访问问题
        )
